// 把常用的操作提示与对话框二次封装为插件的形式进行全局复用，减少重复代码，提高开发效率
import { ElMessage, ElMessageBox, ElNotification } from "element-plus"

// 操作提示弹窗
interface INotify {
  title?: string
  type?: "success" | "warning" | "info" | "error" | ""
  message: string
  position?: "top-right" | "top-left" | "bottom-right" | "bottom-left"
  duration?: number
}
/**
 *
 * @param notifyConfig  操作提示弹窗配置
 * @returns 返回ElNotification()
 */
function InnerNotify(notifyConfig: INotify) {
  return ElNotification[notifyConfig.type ?? "success"]({
    title: notifyConfig.title ?? "操作提示",
    message: notifyConfig.message,
    position: notifyConfig.position ?? "bottom-left",
    duration: notifyConfig.duration ?? 1500
  })
}

// 操作对话框
/**
 *
 * @param title 操作对话框配置
 * @returns 返回布尔值
 */
function InnerConfirm(title = "是否进行操作？") {
  return new Promise<any>((resolve, reject) => {
    ElMessageBox.confirm(title, "提示", {
      confirmButtonText: "确定",
      cancelButtonText: "取消",
      type: "warning"
    })
      .then((res) => {
        resolve(res)
      })
      .catch((err) => {
        ElMessage.info({
          message: "操作取消"
        })
        reject(err)
      })
  })
}

// const notificationHintPlugin = {
//   install(app: App) {
//     console.log(app)
//     /*
//       app.config：这是 Vue 3 应用实例的配置对象，包含了全局配置和其它一些配置项
//       app.config.globalProperties:用于配置全局的属性或方法
//     */
//     // 在全局范围内注册一些方法和属性，这使得封装一些通用的的组件或功能得以复用
//     app.config.globalProperties.$innerNotify = innerNotify

//     // app.provide("innerNotify", innerNotify)
//   }
// }

export { InnerNotify, InnerConfirm }
